package com.yupi.yupicturebackend.api.aliyunai.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;

/**
 * 创建生图任务的响应类
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CreateImageTaskResponse implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 任务输出信息
     */
    private Output output;

    /**
     * 请求唯一标识，可用于请求明细溯源和问题排查
     */
    @JsonProperty("request_id")
    private String requestId;

    /**
     * 请求失败的错误码，请求成功时不会返回此参数
     */
    private String code;

    /**
     * 请求失败的详细信息，请求成功时不会返回此参数
     */
    private String message;

    /**
     * 任务输出信息内部类
     */
    @Data
    public static class Output implements Serializable {

        private static final long serialVersionUID = 1L;

        /**
         * 模型生成的内容数组
         */
        private List<Choice> choices;

        /**
         * 任务结果统计
         */
        @JsonProperty("task_metrics")
        private TaskMetrics taskMetrics;

        /**
         * 输出信息统计，只对成功的结果计数
         */
        private Usage usage;
    }

    /**
     * 模型生成的内容项内部类
     */
    @Data
    public static class Choice implements Serializable {

        private static final long serialVersionUID = 1L;

        /**
         * 自然停止时输出为stop
         */
        @JsonProperty("finish_reason")
        private String finishReason;

        /**
         * 输出的消息
         */
        private Message messages;
    }

    /**
     * 输出消息内部类
     */
    @Data
    public static class Message implements Serializable {

        private static final long serialVersionUID = 1L;

        /**
         * 消息的角色，固定为assistant
         */
        private String role;

        /**
         * 消息内容数组
         */
        private List<Content> content;
    }

    /**
     * 消息内容内部类
     */
    @Data
    public static class Content implements Serializable {

        private static final long serialVersionUID = 1L;

        /**
         * 模型生成图片的URL地址，有效期24小时
         */
        private String image;
    }

    /**
     * 任务结果统计内部类
     */
    @Data
    public static class TaskMetrics implements Serializable {

        private static final long serialVersionUID = 1L;

        /**
         * 总的任务数
         */
        private Integer TOTAL;

        /**
         * 任务状态为成功的任务数
         */
        private Integer SUCCEEDED;

        /**
         * 任务状态为失败的任务数
         */
        private Integer FAILED;
    }

    /**
     * 输出信息统计内部类
     */
    @Data
    public static class Usage implements Serializable {

        private static final long serialVersionUID = 1L;

        /**
         * 模型生成图片的数量，当前固定为1
         */
        @JsonProperty("image_count")
        private Integer imageCount;

        /**
         * 模型生成图片的宽度，单位像素
         */
        private Integer width;

        /**
         * 模型生成图片的高度，单位像素
         */
        private Integer height;
    }
}
    